์ž‘์„ฑ: 2026-03-04 05:39:06์ˆ˜์ •: 2026-03-04 05:39:06

ํ˜„๋Œ€ ํ”„๋ก ํŠธ์—”๋“œ ์ƒํƒœ ๊ด€๋ฆฌ: Zustand์™€ Pinia๋กœ ๊ฐ€๋ณ๊ฒŒ ์‹œ์ž‘ํ•˜๊ธฐ

์ปดํฌ๋„ŒํŠธ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๋‹ค ๋ณด๋ฉด 'Prop Drilling'(์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ Props๋ฅผ ์ „๋‹ฌ) ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Redux ๊ฐ™์€ ๊ฑฐ๋Œ€ํ•œ ๋„๊ตฌ๋ฅผ ์“ธ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ตœ๊ทผ์—๋Š” ๋” ๋‹จ์ˆœํ•˜๊ณ  ์ง๊ด€์ ์ธ Zustand์™€ Pinia๊ฐ€ ๋Œ€์„ธ๋กœ ์ž๋ฆฌ ์žก์•˜์Šต๋‹ˆ๋‹ค.


1. ์ƒํƒœ ๊ด€๋ฆฌ๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ณต์œ  ๋ฐ์ดํ„ฐ(์‚ฌ์šฉ์ž ์ •๋ณด, ํ…Œ๋งˆ, ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋“ฑ)๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.


2. Zustand: React๋ฅผ ์œ„ํ•œ ์ž‘๊ณ  ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ

Zustand๋Š” ๋…์ผ์–ด๋กœ '์ƒํƒœ'๋ผ๋Š” ๋œป์œผ๋กœ, ์„ค์ •์ด ๊ฑฐ์˜ ์—†๊ณ  ๋งค์šฐ ๊ฐ€๋ฒผ์šด ๋ฆฌ์•กํŠธ์šฉ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

Zustand ์‚ฌ์šฉ๋ฒ• (์˜ˆ์‹œ)

import { create } from 'zustand';
 
// ์Šคํ† ์–ด ์ƒ์„ฑ
const useStore = create((set) => ({
  count: 0,
  increase: () => set((state) => ({ count: state.count + 1 })),
  removeAll: () => set({ count: 0 }),
}));
 
// ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉ
function Counter() {
  const { count, increase } = useStore();
  return (
    <div>
      <h1>{count}</h1>
      <button onClick={increase}>์ฆ๊ฐ€</button>
    </div>
  );
}

3. Pinia: Vue์˜ ๊ณต์‹ ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ

Vue 3๋ถ€ํ„ฐ๋Š” ๊ธฐ์กด์˜ Vuex ๋Œ€์‹  Pinia๋ฅผ ๊ณต์‹์ ์œผ๋กœ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ง€์›์ด ์™„๋ฒฝํ•˜๊ณ  ๊ตฌ์กฐ๊ฐ€ ๋‹จ์ˆœํ•ฉ๋‹ˆ๋‹ค.

Pinia ์‚ฌ์šฉ๋ฒ• (์˜ˆ์‹œ)

import { defineStore } from 'pinia';
 
export const useCounterStore = defineStore('counter', {
  state: () => ({ count: 0 }),
  actions: {
    increment() {
      this.count++;
    },
  },
});

4. ์™œ Redux๊ฐ€ ์•„๋‹Œ ์ด๋“ค์„ ์„ ํƒํ• ๊นŒ?

  1. ๋Ÿฌ๋‹ ์ปค๋ธŒ: Redux๋Š” ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ๊ฐ€ ๋งŽ๊ณ  ๋ณต์žกํ•˜์ง€๋งŒ, Zustand/Pinia๋Š” ๋ช‡ ๋ถ„ ๋งŒ์— ๋ฐฐ์›Œ์„œ ๋ฐ”๋กœ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ๋ฒˆ๋“ค ํฌ๊ธฐ: ๋งค์šฐ ๊ฐ€๋ฒผ์›Œ ์„ฑ๋Šฅ ์ตœ์ ํ™”์— ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  3. ์œ ์—ฐ์„ฑ: ํŠน์ • ๊ตฌ์กฐ๋ฅผ ๊ฐ•์ œํ•˜์ง€ ์•Š์•„ ๊ฐœ๋ฐœ์ž ์ทจํ–ฅ์— ๋งž๊ฒŒ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5. ๊ฒฐ๋ก 

ํ”„๋กœ์ ํŠธ๊ฐ€ ์—„์ฒญ๋‚˜๊ฒŒ ํฌ๊ณ  ์—„๊ฒฉํ•œ ๊ทœ์น™์ด ํ•„์š”ํ•˜๋‹ค๋ฉด Redux๊ฐ€ ์—ฌ์ „ํžˆ ์œ ํšจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ํ˜„๋Œ€์  ์›น ์„œ๋น„์Šค์™€ ์Šคํƒ€ํŠธ์—… ํ”„๋กœ์ ํŠธ์—์„œ๋Š” **Zustand(React)**๋‚˜ **Pinia(Vue)**๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ƒ์‚ฐ์„ฑ ์ธก๋ฉด์—์„œ ํ›จ์”ฌ ํƒ์›”ํ•œ ์„ ํƒ์ž…๋‹ˆ๋‹ค.